package multithreading;

/**
 * 向线程池提交有异步运算结果的任务
 *
 * Callable<T>接口：和Runnable接口类似，都指定了线程所要执行的操作，
 *                  区别在于Callable<T>接口是在call()方法中指定线程执行的操作，并且call()方法有泛型的返回值“<T>”
 *
 *
 * Future<T>接口：能保存异步运算结果
 * get()        返回异步运算的结果。如果运算结果还没有出来，则当前线程就会阻塞，直到获得运算结果才结束阻塞
 * get(long timeout, TimeUnit unit)     与不带参的get()方法类似，不过本方法为阻塞设置了限定时间
 *                                      如果超过参数限定的时间，还没有获得运算结果，则抛出TimeoutException
 *                                      future.get(50L, TimeUnit.SECONDS)   表示限定时间为50s
 * cancel(boolean mayInterrupt)     取消该运算。
 *                                  如果运算还没开始则立即取消，如果已开始并且mayInterrupt参数为true也会立刻取消
 *                                  如果已开始并且mayInterrupt参数为false则不会取消运算，而是让其继续执行
 * isCancelled()        判断运算是否已经被取消，如果被取消则返回true
 * isDone()             判断运算是否已经完成，如果已经完成则返回true
 * */
public class CallableAndFutureDemo {
    // 案例在NetworkProgramming.NP1SocketAndServerSocket包下的SpamCheckTreadPool.java文件
}
